package eu.runelord.tools.dictionaries;

import java.util.Collection;

/**
 * Publiczny interfejs słownika.<br/>Interfejs ten jest wspólny dla wszystkich
 * implementacji słowników w projekcie. Jeżeli słownik jest niemodyfikowalny
 * {@link IUnmodifiableDictionary} to część metod powinna zwracać wyjątek
 * {@link ModificationTrialException}. Słownik niemodyfikowalny to taki
 * słownik, w którym nie można dodawać, usuwać ani modyfikować wartości.
 * Domyślnie każdy słownik jest modyfikowalny. Ten interfejs należy
 * zaimplementować w celu stworzenia słownika. Implementacja powinna uwzględniać
 * w pierwszej kolejności sposób przechowywania wartości w ramach słownika oraz
 * sposób utrwalania słownika.
 * 
 * @author Koziołek
 * 
 */
public interface IDictionary {

	public void addOrUpdateValue(Value value);

	public void addValue(Value value);

	public void deleteValue(Value value);

	public String getDescription();

	public Long getId();

	public String getName();

	public Collection<Value> getValues();

	public Boolean isModifiable();

	public void setDescription(String description);

	public void setId(Long id);

	public void setName(String name);

	public void setValues(Collection<Value> valueCollection);

	public void updateValue(Value oldValue, Value newValue);

	public Long getSize();
}
